<?php

require_once 'UC_DBServer.php';

abstract class UC_DBBase
{
    public function __construct(UC_DBServer $Server)
    {
        $this->set_Server_($Server);
    }
            
    abstract public function Associators_();
    abstract public function Clone_();
    abstract public function CompareTo_();
    abstract public function Delete_();
    abstract public function ExecuteMethod_();
    abstract static function Exists_(UC_DBObjectPath $object_path);
    abstract static function Get_(UC_DBObjectPath $object_path);
    abstract static function Instances_();
    abstract public function Put_();
    abstract public function References_();
    abstract static function SpawnInstance_();
    
    public function get_Server_()
    {
        return $this->Server_;
    }

    public function set_Server_(UC_DBServer $Server_)
    {
        $this->Server_ = $Server_;
    }
    
    public function get_Path_()
    {
        return $this->Path_;
    }

    public function set_Path_(UC_DBObjectPath $Path_)
    {
        $this->Path_ = $Path_;
    }

    public function get_Persisted_()
    {
        return $this->Persisted_;
    }

    public function set_Persisted_($Persisted_)
    {
        if(is_bool($Persisted_))
        {
            $this->Persisted_ = $Persisted_;
        }
        else
        {
            throw new InvalidArgumentException(
                'The value should be boolean.');
        }
    }

    public function get_Properties_()
    {
        return $this->Properties_;
    }

    public function set_Properties_($Properties_)
    {
        $this->Properties_ = $Properties_;
    }
    public function get_Touched_()
    {
        return $this->Touched_;
    }

    public function set_Touched_($Touched_)
    {
        $this->Touched_ = $Touched_;
    }

    protected $Class;
    protected $Methods_;
    protected $Path_;
    protected $Properties_;
    protected $Server_;
    
    protected $FullyInitialized_ = false;
    protected $InSpace_;
    protected $Persisted_;
    protected static $SpawnNew_ = false;
    protected $Touched_;
}

?>
